﻿using Data.Infrastructure;
using Data.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Data.Repositories
{
    //Dành cho dữ liệu tham chiếu
    public class WorkplaceRepository : RepositoryBase<Workplace>, IWorkplaceRepository
    {
        public WorkplaceRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IWorkplaceRepository : IRepository<Workplace>
    {

    }
    public class UnitRepository : RepositoryBase<Unit>, IUnitRepository
    {
        public UnitRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IUnitRepository : IRepository<Unit>
    {

    }
    public class EmployeeRepository : RepositoryBase<Employee>, IEmployeeRepository
    {
        public EmployeeRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IEmployeeRepository : IRepository<Employee>
    {

    }

    //Dành cho lệnh sản xuất
    public class OrderRepository : RepositoryBase<Order>, IOrderRepository
    {
        public OrderRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IOrderRepository : IRepository<Order>
    {

    }
    public class MaterialDetailRepository : RepositoryBase<MaterialDetail>, IMaterialDetailRepository
    {
        public MaterialDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IMaterialDetailRepository : IRepository<MaterialDetail>
    {

    }
    public class LabourDetailRepository : RepositoryBase<LabourDetail>, ILabourDetailRepository
    {
        public LabourDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface ILabourDetailRepository : IRepository<LabourDetail>
    {

    }
    public class ToolDetailRepository : RepositoryBase<ToolDetail>, IToolDetailRepository
    {
        public ToolDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IToolDetailRepository : IRepository<ToolDetail>
    {

    }
    public class OtherCostDetailRepository : RepositoryBase<OtherCostDetail>, IOtherCostDetailRepository
    {
        public OtherCostDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IOtherCostDetailRepository : IRepository<OtherCostDetail>
    {

    }

    //Dành cho thực hiện sản xuất
    public class OrderProcessRepository : RepositoryBase<OrderProcess>, IOrderProcessRepository
    {
        public OrderProcessRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IOrderProcessRepository : IRepository<OrderProcess>
    {

    }
    public class SubprocessDetailRepository : RepositoryBase<SubprocessDetail>, ISubprocessDetailRepository
    {
        public SubprocessDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface ISubprocessDetailRepository : IRepository<SubprocessDetail>
    {

    }
    public class CostDetailRepository : RepositoryBase<CostDetail>, ICostDetailRepository
    {
        public CostDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface ICostDetailRepository : IRepository<CostDetail>
    {

    }
    
    //Kết thúc sản xuất
    public class OrderSummaryRepository : RepositoryBase<OrderSummary>, IOrderSummaryRepository
    {
        public OrderSummaryRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IOrderSummaryRepository : IRepository<OrderSummary>
    {

    }
    public class StorageDetailRepository : RepositoryBase<StorageDetail>, IStorageDetailRepository
    {
        public StorageDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IStorageDetailRepository : IRepository<StorageDetail>
    {

    }
    //dung cho phieu xuat
    public class BillDetailRepository : RepositoryBase<BillDetail>, IBillDetailRepository
    {
        public BillDetailRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IBillDetailRepository : IRepository<BillDetail>
    {

    }
    public class BillOutRepository : RepositoryBase<BillOut>, IBillOutRepository
    {
        public BillOutRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IBillOutRepository : IRepository<BillOut>
    {

    }
    //Dung cho report
    public class PriceMaterialRepository : RepositoryBase<PriceMaterial>, IPriceMaterialtRepository
    {
        public PriceMaterialRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IPriceMaterialtRepository : IRepository<PriceMaterial>
    {

    }
    public class PriceStoreRepository : RepositoryBase<PriceStore>, IPriceStoreRepository
    {
        public PriceStoreRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IPriceStoreRepository : IRepository<PriceStore>
    {

    }

    public class PrintMaterialRepository : RepositoryBase<PrintMaterial>, IPrintMaterialRepository
    {
        public PrintMaterialRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
        }
    }
    public interface IPrintMaterialRepository : IRepository<PrintMaterial>
    {

    }
}
